fix some url related memory leaks.
authortsteven4 <tsteven4@f51c46e8-681c-474f-0cfe-069cfd0219fb>
Fri, 30 Aug 2013 21:25:48 +0000 (21:25 +0000)
committertsteven4 <tsteven4@f51c46e8-681c-474f-0cfe-069cfd0219fb>
Fri, 30 Aug 2013 21:25:48 +0000 (21:25 +0000)
add constructor for UrlLink from char*.

git-svn-id: http://gpsbabel.googlecode.com/svn/trunk@4582 f51c46e8-681c-474f-0cfe-069cfd0219fb

12 files changed:
gpsbabel/an1.cc
gpsbabel/cst.cc
gpsbabel/defs.h
gpsbabel/easygps.cc
gpsbabel/garmin_gpi.cc
gpsbabel/garmin_txt.cc
gpsbabel/gdb.cc
gpsbabel/mmo.cc
gpsbabel/shape.cc
gpsbabel/tmpro.cc
gpsbabel/tpo.cc
gpsbabel/unicsv.cc

index 11a6e9f7884d10296c0341c66a67cab335fba26a..954d081e2a118451c3c75eb3ad27d180cb2c4ce6 100644 (file)
@@ -710,14 +710,12 @@ static void Read_AN1_Waypoints(gbfile* f)
     wpt_tmp->notes = xstrdup(rec->comment);
     wpt_tmp->description = xstrdup(rec->name);
     if (rec->url) {
-      UrlLink l(rec->url);
-      wpt_tmp->AddUrlLink(l);
+      wpt_tmp->AddUrlLink(rec->url);
     } else if (NULL != (url=strstr(wpt_tmp->description, "{URL="))) {
       *url = '\0';
       url += 5;
       url[strlen(url)-1] = '\0';
-      UrlLink l(url);
-      wpt_tmp->AddUrlLink(l);
+      wpt_tmp->AddUrlLink(url);
     }
 
     if (rec->image_name) {
index dec667de3a4312f8bea4a3b83bb760118c065bc4..b2b2d8f451d060785714421320690d309ccd1de5 100644 (file)
@@ -216,8 +216,11 @@ cst_data_read(void)
         if (strncmp(cin + 2, "bitmap", 6) == 0) {
           cin = lrtrim(cin + 8);
           if (*cin != '\0') {
-            UrlLink l(cst_make_url(cin));
-            wpt->AddUrlLink(l);
+            char* url = cst_make_url(cin);
+            wpt->AddUrlLink(url);
+            if (url) {
+              xfree(url);
+            }
           }
         }
 
index 9cfae14d9ec1961f64b34f665361afdb6ae1d684..60a841aa2ffbe36d13f7ef7fbe9d0dfc602c2399 100644 (file)
@@ -369,10 +369,13 @@ class UrlLink
 {
 public:
   UrlLink() { }
-  UrlLink(QString url) :
+  UrlLink(const QString url) :
     url_(url)
   { }
-  UrlLink(QString url, QString url_link_text) :
+  UrlLink(const char* url) :
+    url_(url)
+  { }
+  UrlLink(const QString url, const QString url_link_text) :
     url_(url),
     url_link_text_(url_link_text)
   { }
index 37759fadfb01d531e16f7ad7e89af482bec2e66e..1a25c67a44be59a8e71a890d143fa82796c8a799 100644 (file)
@@ -93,26 +93,41 @@ data_read(void)
         break;
       case 2:
       case 3:
-        wpt_tmp->description = gbfgetpstr(file_in);;
+        wpt_tmp->description = gbfgetpstr(file_in);
         break;
       case 5:
-        wpt_tmp->notes = gbfgetpstr(file_in);;
-        break;
-      case 6:
-        link.url_link_text_ = gbfgetpstr(file_in);;
+        wpt_tmp->notes = gbfgetpstr(file_in);
         break;
+      case 6: {
+        char* ult = gbfgetpstr(file_in);
+        link.url_link_text_ = ult;
+        if (ult) {
+          xfree(ult);
+        }
+      }
+      break;
       case 7:
-        wpt_tmp->icon_descr = gbfgetpstr(file_in);;
+        wpt_tmp->icon_descr = gbfgetpstr(file_in);
         break;
       case 8:  /* NULL Terminated (vs. pascal) descr */
         wpt_tmp->notes = gbfgetcstr(file_in);
         break;
-      case 9: /* NULL Terminated (vs. pascal) link */
-        link.url_ = gbfgetcstr(file_in);
-        break;
-      case 0x10:
-        link.url_link_text_ = gbfgetcstr(file_in);
-        break;
+      case 9: { /* NULL Terminated (vs. pascal) link */
+        char* url = gbfgetcstr(file_in);
+        link.url_ = url;
+        if (url) {
+          xfree(url);
+        }
+      }
+      break;
+      case 0x10: {
+        char* ult = gbfgetcstr(file_in);
+        link.url_link_text_ = ult;
+        if (ult) {
+          xfree(ult);
+        }
+      }
+      break;
       case 0x63:
         wpt_tmp->latitude = gbfgetdbl(file_in);
         break;
index 12dfde10a8b6d4be2ecf9c150c71d7d5ca85f582..dd83fdc6dbcb7510c3d4dca09a30cf94f4eaf2e4 100644 (file)
@@ -648,6 +648,9 @@ read_tag(const char* caller, const int tag, waypoint* wpt)
     }
     if ((mask & 0x10) && (str = gpi_read_string("Link"))) {
       waypt_add_url(wpt, str, str);
+      if (str) {
+        xfree(str);
+      }
     }
     break;
 
index 882fba899919675aed0697350807e9a6fbd60e5c..0a90649645eec93d4cb242a7adce40b356759b5f 100644 (file)
@@ -1200,8 +1200,7 @@ parse_waypoint(void)
     }
     break;
     case 17: {
-      UrlLink l(str);
-      wpt->AddUrlLink(l);
+      wpt->AddUrlLink(str);
     }
     break;
     case 18:
index 561fe8ec5ab1f6cc35d69ac83a893702c38f6ba7..f7b78ea429a261df2c58aa7ad11301ceb4fffe9b 100644 (file)
@@ -652,13 +652,13 @@ read_waypoint(gt_waypt_classes_e* waypt_class_out)
 
     url_ct = FREAD_i32;
     for (i = url_ct; (i); i--) {
-      char* str = FREAD_CSTR;
-      if (str && *str) {
+      QString str = FREAD_CSTR_AS_QSTR;
+      if (!str.isEmpty()) {
         waypt_add_url(res, str, NULL);
 #if GDB_DEBUG
         DBG(GDB_DBG_WPTe, 1)
         printf(MYNAME "-wpt \"%s\" (%d): url(%d) = %s\n",
-               sn, wpt_class, url_ct - i, str);
+               sn, wpt_class, url_ct - i, CSTR(str));
 #endif
       }
     }
index 08bb085c31b75f92095c7100a6272ad7f5f10e29..ef8093e45b9cb4b7f05495902989ae7675a6eada 100644 (file)
@@ -513,12 +513,11 @@ mmo_read_CObjWaypoint(mmo_data_t* data)
       cend = cx + strlen(cx);
     }
 
-    cx = lrtrim(xstrndup(cx, cend - cx));
-    if (*cx) {
-      UrlLink l(cx);
-      wpt->AddUrlLink(l);
-    } else {
-      xfree(cx);
+    {
+      QString url = QString::fromUtf8(cx, cend-cx).trimmed();
+      if (!url.isEmpty()) {
+        wpt->AddUrlLink(url);
+      }
     }
 
     if (*cend++) {
index f5aa921b72259dcf2595b768e86c04367b893f60..8aa9ba58eb41388491d7217cd0409625e6bc5cfa 100644 (file)
@@ -187,8 +187,7 @@ my_read(void)
       wpt->longitude = shp->dfXMin;
       wpt->shortname = xstrdup(name);
       if (url) {
-        UrlLink l(url);
-        wpt->AddUrlLink(l);
+        wpt->AddUrlLink(url);
       }
       waypt_add(wpt);
       break;
index f6f41e6b1a3f526fbe500ba62c83c29dd736721d..9f8eb02aa5a71134a7c624ba33d5d082d368cb12 100644 (file)
@@ -143,8 +143,7 @@ data_read(void)
           */
           holder = csv_stringtrim(s, "", 0);
           if (strstr(holder, "http:") != NULL) {
-            UrlLink link(holder);
-            wpt_tmp->AddUrlLink(link);
+            wpt_tmp->AddUrlLink(holder);
           }
           xfree(holder);
           break;
index b317c3fd6efd094c1c246206c347ecc14a594a9a..7c92604f550ea0589138d3a88bdcc154f1cfc3a5 100644 (file)
@@ -1035,8 +1035,7 @@ void tpo_process_map_notes(void)
       notes[0] = '\0';
       gbfread(notes, 1, name_length, tpo_file_in);
       notes[name_length] = '\0';  // Terminator
-      UrlLink l(notes);
-      waypoint_temp->AddUrlLink(l);
+      waypoint_temp->AddUrlLink(notes);
 //printf("Notes: %s\n", notes);
       xfree(notes);
     }
@@ -1052,8 +1051,7 @@ void tpo_process_map_notes(void)
       notes[0] = '\0';
       gbfread(notes, 1, name_length, tpo_file_in);
       notes[name_length] = '\0';  // Terminator
-      UrlLink l(notes);
-      waypoint_temp->AddUrlLink(l);
+      waypoint_temp->AddUrlLink(notes);
 //printf("Notes: %s\n", notes);
       xfree(notes);
     }
index 38e83cd31485a3e08717d1eba088b2ace3c79805..b6fca43e68a947574257eeb3bd984f258881526a 100644 (file)
@@ -733,8 +733,7 @@ unicsv_parse_one_line(char* ibuf)
       break;
 
     case fld_url: {
-      UrlLink l(s);
-      wpt->AddUrlLink(l);
+      wpt->AddUrlLink(s);
     }
     break;